package fiuba.algo3.algothief.modelo;

import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;

import org.xml.sax.SAXException;

public abstract class Policia {

	protected int cantidadDeArrestos;
	protected int velocidad;
	private Pais paisEnElQueSeEncuentra;
	protected String rango;
	private Caso casoEncomendado;
	private int cantidadEntradasALugares;

	public Policia(){	
		this.cantidadEntradasALugares = 0;
	}
	
	public int getCantidadDeArrestos(){
		return this.cantidadDeArrestos;
	}

	public void agregarArresto() {
		this.cantidadDeArrestos++;
		this.casoEncomendado.verificarRangoPolicia();
		
	}
	
	public int getVelocidad(){
		return this.velocidad;
	}

	public void viajarAPais(Pais paisDeDestino) {
		double distancia = (this.paisEnElQueSeEncuentra.calcularDistancia(paisDeDestino));
		this.paisEnElQueSeEncuentra = paisDeDestino;
		int horasDeViaje = (int) (distancia/this.velocidad);
		this.casoEncomendado.adelantarTiempo(horasDeViaje);
		this.cantidadEntradasALugares = 0;
	}

	public Pais getPaisEnElQueSeEncuentra() {
		return this.paisEnElQueSeEncuentra;
	}

	public void setPaisDeOrigen(Pais unPais) {
		this.paisEnElQueSeEncuentra = unPais;
	}
		
	public abstract Pista PedirPistaEn(Lugar unLugar);
	
	public abstract Ladron atraparAlLadron() throws ParserConfigurationException, TransformerException, SAXException, IOException;
		
	public void fueHeridoPorUnCuchillo() {
		this.casoEncomendado.adelantarTiempo(2);
	}

	public void fueHeridoPorArmaDeFuego() {
		this.casoEncomendado.adelantarTiempo(4);
		}

	public Caso getCasoEncomendado() {
		return this.casoEncomendado;
	}

	public void setCasoEncomendado(Caso unCaso) {
		this.casoEncomendado = unCaso;
		
	}

	public String ingresaDatos(String sexo, String hobby, String cabello,
			String senia, String vehiculo) throws ParserConfigurationException, TransformerException, SAXException, IOException {
		BuscadorDeSospechosos buscadorDeSospechosos = new BuscadorDeSospechosos(sexo,hobby,cabello,senia,vehiculo);
		String sospechoso = "";
		buscadorDeSospechosos.compararDatos();
		if (buscadorDeSospechosos.cantidadSospechosos() == 1) {
			this.casoEncomendado.setOrdenDeArresto(new OrdenDeArresto(buscadorDeSospechosos.getSospechoso()));
			this.casoEncomendado.adelantarTiempo(3);
			sospechoso = buscadorDeSospechosos.getSospechoso();}
		return sospechoso;
	}
	
	public String getRango() {
		return this.rango;
	}

	public void entrarALugar(){
		this.cantidadEntradasALugares ++;
		switch (this.cantidadEntradasALugares){
		case 1:
			this.casoEncomendado.adelantarTiempo(1);
			break;
		case 2:
			this.casoEncomendado.adelantarTiempo(2);
			break;
		default:
			this.casoEncomendado.adelantarTiempo(3);
			break;
		}
		
	}
}
